home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / Common / include / d3dutil.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-31  |  10.5 KB  |  257 lines

  1. //-----------------------------------------------------------------------------
  2. // File: D3DUtil.h
  3. //
  4. // Desc: Helper functions and typing shortcuts for Direct3D programming.
  5. //
  6. // Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved
  7. //-----------------------------------------------------------------------------
  8. #ifndef D3DUTIL_H
  9. #define D3DUTIL_H
  10. #include <D3D8.h>
  11. #include <D3DX8Math.h>
  12.  
  13.  
  14.  
  15.  
  16. //-----------------------------------------------------------------------------
  17. // Name: D3DUtil_InitMaterial()
  18. // Desc: Initializes a D3DMATERIAL8 structure, setting the diffuse and ambient
  19. //       colors. It does not set emissive or specular colors.
  20. //-----------------------------------------------------------------------------
  21. VOID D3DUtil_InitMaterial( D3DMATERIAL8& mtrl, FLOAT r=0.0f, FLOAT g=0.0f,
  22.                                                FLOAT b=0.0f, FLOAT a=1.0f );
  23.  
  24.  
  25.  
  26.  
  27. //-----------------------------------------------------------------------------
  28. // Name: D3DUtil_InitLight()
  29. // Desc: Initializes a D3DLIGHT structure, setting the light position. The
  30. //       diffuse color is set to white, specular and ambient left as black.
  31. //-----------------------------------------------------------------------------
  32. VOID D3DUtil_InitLight( D3DLIGHT8& light, D3DLIGHTTYPE ltType,
  33.                         FLOAT x=0.0f, FLOAT y=0.0f, FLOAT z=0.0f );
  34.  
  35.  
  36.  
  37.  
  38. //-----------------------------------------------------------------------------
  39. // Name: D3DUtil_CreateTexture()
  40. // Desc: Helper function to create a texture. It checks the root path first,
  41. //       then tries the DXSDK media path (as specified in the system registry).
  42. //-----------------------------------------------------------------------------
  43. HRESULT D3DUtil_CreateTexture( LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* strTexture,
  44.                                LPDIRECT3DTEXTURE8* ppTexture,
  45.                                D3DFORMAT d3dFormat = D3DFMT_UNKNOWN );
  46.  
  47.  
  48.  
  49.  
  50. //-----------------------------------------------------------------------------
  51. // Name: D3DUtil_SetColorKey()
  52. // Desc: Changes all texels matching the colorkey to transparent, black.
  53. //-----------------------------------------------------------------------------
  54. HRESULT D3DUtil_SetColorKey( LPDIRECT3DTEXTURE8 pTexture, DWORD dwColorKey );
  55.  
  56.  
  57.  
  58.  
  59. //-----------------------------------------------------------------------------
  60. // Name: D3DUtil_CreateVertexShader()
  61. // Desc: Assembles and creates a file-based vertex shader
  62. //-----------------------------------------------------------------------------
  63. HRESULT D3DUtil_CreateVertexShader( LPDIRECT3DDEVICE8 pd3dDevice, 
  64.                                     TCHAR* strFilename, DWORD* pdwVertexDecl,
  65.                                     DWORD* pdwVertexShader );
  66.  
  67.                                     
  68.                                     
  69.                                     
  70. //-----------------------------------------------------------------------------
  71. // Name: D3DUtil_GetCubeMapViewMatrix()
  72. // Desc: Returns a view matrix for rendering to a face of a cubemap.
  73. //-----------------------------------------------------------------------------
  74. D3DXMATRIX D3DUtil_GetCubeMapViewMatrix( DWORD dwFace );
  75.  
  76.  
  77.  
  78.  
  79. //-----------------------------------------------------------------------------
  80. // Name: D3DUtil_GetRotationFromCursor()
  81. // Desc: Returns a quaternion for the rotation implied by the window's cursor
  82. //       position.
  83. //-----------------------------------------------------------------------------
  84. D3DXQUATERNION D3DUtil_GetRotationFromCursor( HWND hWnd,
  85.                                               FLOAT fTrackBallRadius=1.0f );
  86.  
  87.  
  88.  
  89.  
  90. //-----------------------------------------------------------------------------
  91. // Name: D3DUtil_SetDeviceCursor
  92. // Desc: Builds and sets a cursor for the D3D device based on hCursor.
  93. //-----------------------------------------------------------------------------
  94. HRESULT D3DUtil_SetDeviceCursor( LPDIRECT3DDEVICE8 pd3dDevice, HCURSOR hCursor,
  95.                                  BOOL bAddWatermark );
  96.  
  97.  
  98.  
  99.  
  100. //-----------------------------------------------------------------------------
  101. // Name: class CD3DArcBall
  102. // Desc:
  103. //-----------------------------------------------------------------------------
  104. class CD3DArcBall
  105. {
  106.     INT            m_iWidth;   // ArcBall's window width
  107.     INT            m_iHeight;  // ArcBall's window height
  108.     FLOAT          m_fRadius;  // ArcBall's radius in screen coords
  109.     FLOAT          m_fRadiusTranslation; // ArcBall's radius for translating the target
  110.  
  111.     D3DXQUATERNION m_qDown;               // Quaternion before button down
  112.     D3DXQUATERNION m_qNow;                // Composite quaternion for current drag
  113.     D3DXMATRIX     m_matRotation;         // Matrix for arcball's orientation
  114.     D3DXMATRIX     m_matRotationDelta;    // Matrix for arcball's orientation
  115.     D3DXMATRIX     m_matTranslation;      // Matrix for arcball's position
  116.     D3DXMATRIX     m_matTranslationDelta; // Matrix for arcball's position
  117.     BOOL           m_bDrag;               // Whether user is dragging arcball
  118.     BOOL           m_bRightHanded;        // Whether to use RH coordinate system
  119.  
  120.     D3DXVECTOR3 ScreenToVector( int sx, int sy );
  121.  
  122. public:
  123.     LRESULT     HandleMouseMessages( HWND, UINT, WPARAM, LPARAM );
  124.  
  125.     D3DXMATRIX* GetRotationMatrix()         { return &m_matRotation; }
  126.     D3DXMATRIX* GetRotationDeltaMatrix()    { return &m_matRotationDelta; }
  127.     D3DXMATRIX* GetTranslationMatrix()      { return &m_matTranslation; }
  128.     D3DXMATRIX* GetTranslationDeltaMatrix() { return &m_matTranslationDelta; }
  129.     BOOL        IsBeingDragged()            { return m_bDrag; }
  130.  
  131.     VOID        SetRadius( FLOAT fRadius );
  132.     VOID        SetWindow( INT w, INT h, FLOAT r=0.9 );
  133.     VOID        SetRightHanded( BOOL bRightHanded ) { m_bRightHanded = bRightHanded; }
  134.  
  135.     CD3DArcBall();
  136. };
  137.  
  138.  
  139.  
  140.  
  141. //-----------------------------------------------------------------------------
  142. // Name: class CD3DCamera
  143. // Desc:
  144. //-----------------------------------------------------------------------------
  145. class CD3DCamera
  146. {
  147.     D3DXVECTOR3 m_vEyePt;       // Attributes for view matrix
  148.     D3DXVECTOR3 m_vLookatPt;
  149.     D3DXVECTOR3 m_vUpVec;
  150.  
  151.     D3DXVECTOR3 m_vView;
  152.     D3DXVECTOR3 m_vCross;
  153.  
  154.     D3DXMATRIX  m_matView;
  155.     D3DXMATRIX  m_matBillboard; // Special matrix for billboarding effects
  156.  
  157.     FLOAT       m_fFOV;         // Attributes for projection matrix
  158.     FLOAT       m_fAspect;
  159.     FLOAT       m_fNearPlane;
  160.     FLOAT       m_fFarPlane;
  161.     D3DXMATRIX  m_matProj;
  162.  
  163. public:
  164.     // Access functions
  165.     D3DXVECTOR3 GetEyePt()           { return m_vEyePt; }
  166.     D3DXVECTOR3 GetLookatPt()        { return m_vLookatPt; }
  167.     D3DXVECTOR3 GetUpVec()           { return m_vUpVec; }
  168.     D3DXVECTOR3 GetViewDir()         { return m_vView; }
  169.     D3DXVECTOR3 GetCross()           { return m_vCross; }
  170.  
  171.     D3DXMATRIX  GetViewMatrix()      { return m_matView; }
  172.     D3DXMATRIX  GetBillboardMatrix() { return m_matBillboard; }
  173.     D3DXMATRIX  GetProjMatrix()      { return m_matProj; }
  174.  
  175.     VOID SetViewParams( D3DXVECTOR3 &vEyePt, D3DXVECTOR3& vLookatPt,
  176.                         D3DXVECTOR3& vUpVec );
  177.     VOID SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane,
  178.                         FLOAT fFarPlane );
  179.  
  180.     CD3DCamera();
  181. };
  182.  
  183. //-----------------------------------------------------------------------------
  184. // Helper macros for pixel shader instructions
  185. //-----------------------------------------------------------------------------
  186.  
  187. // Parameter writemasks
  188. #define D3DPSP_WRITEMASK_B   D3DSP_WRITEMASK_0
  189. #define D3DPSP_WRITEMASK_G   D3DSP_WRITEMASK_1
  190. #define D3DPSP_WRITEMASK_R   D3DSP_WRITEMASK_2
  191. #define D3DPSP_WRITEMASK_A   D3DSP_WRITEMASK_3
  192. #define D3DPSP_WRITEMASK_C   (D3DPSP_WRITEMASK_B|D3DPSP_WRITEMASK_G|D3DPSP_WRITEMASK_R)
  193. #define D3DPSP_WRITEMASK_ALL (D3DSP_WRITEMASK_0|D3DSP_WRITEMASK_1|D3DSP_WRITEMASK_2|D3DSP_WRITEMASK_3)
  194. #define D3DPSP_WRITEMASK_10  (D3DSP_WRITEMASK_0|D3DSP_WRITEMASK_1)
  195. #define D3DPSP_WRITEMASK_32  (D3DSP_WRITEMASK_2|D3DSP_WRITEMASK_3)
  196.  
  197. // Source and destination parameter token
  198. #define D3DPS_REGNUM_MASK(_Num)   ( (1L<<31) | ((_Num)&D3DSP_REGNUM_MASK) )
  199. #define D3DPS_DST(_Num)           ( D3DPS_REGNUM_MASK(_Num) | D3DSPR_TEMP | D3DPSP_WRITEMASK_ALL )
  200. #define D3DPS_SRC_TEMP(_Num)      ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEMP )
  201. #define D3DPS_SRC_INPUT(_Num)     ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_INPUT )
  202. #define D3DPS_SRC_CONST(_Num)     ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_CONST )
  203. #define D3DPS_SRC_TEXTURE(_Num)   ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEXTURE )
  204. #define D3DVS_SRC_ADDR(_Num)      ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_ADDR )
  205. #define D3DVS_SRC_RASTOUT(_Num)   ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_RASTOUT )
  206. #define D3DVS_SRC_ATTROUT(_Num)   ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_ATTROUT )
  207. #define D3DVS_SRC_TEXCRDOUT(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEXCRDOUT )
  208.  
  209. // Temp destination registers
  210. #define D3DS_DR0   D3DPS_DST(0)
  211. #define D3DS_DR1   D3DPS_DST(1)
  212. #define D3DS_DR2   D3DPS_DST(2)
  213. #define D3DS_DR3   D3DPS_DST(3)
  214. #define D3DS_DR4   D3DPS_DST(4)
  215. #define D3DS_DR5   D3DPS_DST(5)
  216. #define D3DS_DR6   D3DPS_DST(6)
  217. #define D3DS_DR7   D3DPS_DST(7)
  218.  
  219. // Temp source registers
  220. #define D3DS_SR0   D3DPS_SRC_TEMP(0)
  221. #define D3DS_SR1   D3DPS_SRC_TEMP(1)
  222. #define D3DS_SR2   D3DPS_SRC_TEMP(2)
  223. #define D3DS_SR3   D3DPS_SRC_TEMP(3)
  224. #define D3DS_SR4   D3DPS_SRC_TEMP(4)
  225. #define D3DS_SR5   D3DPS_SRC_TEMP(5)
  226. #define D3DS_SR6   D3DPS_SRC_TEMP(6)
  227. #define D3DS_SR7   D3DPS_SRC_TEMP(7)
  228.  
  229. // Texture parameters
  230. #define D3DS_T0   D3DPS_SRC_TEXTURE(0)
  231. #define D3DS_T1   D3DPS_SRC_TEXTURE(1)
  232. #define D3DS_T2   D3DPS_SRC_TEXTURE(2)
  233. #define D3DS_T3   D3DPS_SRC_TEXTURE(3)
  234. #define D3DS_T4   D3DPS_SRC_TEXTURE(4)
  235. #define D3DS_T5   D3DPS_SRC_TEXTURE(5)
  236. #define D3DS_T6   D3DPS_SRC_TEXTURE(6)
  237. #define D3DS_T7   D3DPS_SRC_TEXTURE(7)
  238.  
  239. // Constant (factor) source parameters
  240. #define D3DS_C0     D3DPS_SRC_CONST(0)
  241. #define D3DS_C1     D3DPS_SRC_CONST(1)
  242. #define D3DS_C2     D3DPS_SRC_CONST(2)
  243. #define D3DS_C3     D3DPS_SRC_CONST(3)
  244. #define D3DS_C4     D3DPS_SRC_CONST(4)
  245. #define D3DS_C5     D3DPS_SRC_CONST(5)
  246. #define D3DS_C6     D3DPS_SRC_CONST(6)
  247. #define D3DS_C7     D3DPS_SRC_CONST(7)
  248.  
  249. // Iterated source parameters (0==Diffuse, 1==specular)
  250. #define D3DS_V0     D3DPS_SRC_INPUT(0)
  251. #define D3DS_V1     D3DPS_SRC_INPUT(1)
  252.  
  253.  
  254.  
  255.  
  256. #endif // D3DUTIL_H
  257.